﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.OzellikTipleri;
using Tipler.Siniflar;
using System.Data;
using IsKurallari.Tanimlama;
using IsKurallari.Yetki;

namespace TapuKadastroWeb
{
    [YetkiAttribute(EnumSayfaYetkileri.Herkes_Yetkili)]
    public partial class MusteriKayit : BasePage
    {
        #region Özellikler

        private int SecilenMusteriID
        {
            get { return (int)Session["SecilenMusteriID"]; }
            set { Session["SecilenMusteriID"] = value; }
        }
        private MusteriDataSet MusteriListesi
        {
            get { return (MusteriDataSet)Session["MusteriListesi"]; }
            set { Session["MusteriListesi"] = value; }
        }

        #endregion

        #region Sayfa Başlangıç

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                MusteriDataSet.MusteriDataTable dtMusteri = new MusteriDataSet.MusteriDataTable();
                txtAdi.MaxLength = dtMusteri.AdiColumn.MaxLength;
                txtSoyadi.MaxLength = dtMusteri.SoyadiColumn.MaxLength;
                txtTCKimlikNo.MaxLength = dtMusteri.TCKimlikNoColumn.MaxLength;
                txtVergiNo.MaxLength = 10;
                txtUnvani.MaxLength = dtMusteri.UnvaniColumn.MaxLength;
                txtTelefonNo.MaxLength = dtMusteri.TelefonNoColumn.MaxLength;
                txtAdres.MaxLength = dtMusteri.AdresColumn.MaxLength;

                ListDoldurFromENUM(typeof(EnumMusteriTipi), ddlMusteriTipi, ListeIlkYazı.Hepsi);
                ListDoldurFromENUM(typeof(EnumMusteriTipi), ddlMusteriTipiKayit, ListeIlkYazı.Seçiniz);

                SecilenMusteriID = -1;
                MusteriListesi = null;
                YetkiIsKurali oYetki = new YetkiIsKurali();
                int lskID = AktifKullanici.KullaniciBilgisiRow.IsLisansSahibiKullaniciIDNull() 
                                                ? AktifKullanici.KullaniciBilgisiRow.KullaniciID 
                                                : AktifKullanici.KullaniciBilgisiRow.LisansSahibiKullaniciID;
                FonksiyonSonuc<MusteriDataSet> oSonucKullanici = oYetki.MusterileriGetirByLisansSahibi(lskID);
                MusteriListesi = oSonucKullanici.Sonuc;

                mv.SetActiveView(vListe);
                grdMusteriListe.DataSource = MusteriListesi;
                grdMusteriListe.DataBind();

            }
        }

        #endregion

        #region Private Metodlar

        private void MusteriListele()
        {
            SecilenMusteriID = -1;

            TanimlamaIsKurali oTanimlama = new TanimlamaIsKurali();
            FonksiyonSonuc<MusteriDataSet> oSonucMusteri = oTanimlama.MusteriGetir(ddlMusteriTipi.SelectedIndex,
            txtAdiARA.Text.Trim(),
            txtSoyadiARA.Text.Trim(),
            txtTCKimlikNoARA.Text.Trim(),
            txtVergiNoARA.Text.Trim());

            if (oSonucMusteri.HataVarMi)
                new Exception(oSonucMusteri.Hata + oSonucMusteri.ExMesaji);

            MusteriListesi = oSonucMusteri.Sonuc;
            grdMusteriListe.DataSource = MusteriListesi;
            grdMusteriListe.DataBind();
        }

        private void FormTemizle()
        {
            ddlMusteriTipiKayit.ClearSelection();
            ddlMusteriTipi.ClearSelection();
            txtAdi.Text = "";
            txtSoyadi.Text = "";
            txtTCKimlikNo.Text = "";
            txtVergiNo.Text = "";
            txtUnvani.Text = "";
            txtTelefonNo.Text = "";
            txtAdres.Text = "";

            SecilenMusteriID = -1;
        }

        private void FormDoldur()
        {
            MusteriDataSet.MusteriRow dr = MusteriListesi.Musteri.FindByMusteriID(SecilenMusteriID);

            ddlMusteriTipiKayit.SelectedIndex = dr.MusteriTipi;
            txtAdi.Text = dr.Adi;
            txtSoyadi.Text = dr.Soyadi;
            txtTCKimlikNo.Text = dr.TCKimlikNo;
            txtVergiNo.Text = dr.VergiNo;
            txtUnvani.Text = dr.Unvani;
            txtTelefonNo.Text = dr.TelefonNo;
            txtAdres.Text = dr.Adres;
        }

        #endregion

        #region Olay Metodları

        protected void btnKaydet_Click(object sender, EventArgs e)
        {
            MusteriDataSet.MusteriRow drMusteri;
            if (MusteriListesi == null) MusteriListesi = new MusteriDataSet();

            if (SecilenMusteriID == -1)
            {
                drMusteri = MusteriListesi.Musteri.NewMusteriRow();

                drMusteri.MusteriID = YeniIDGetir(new MusteriDataSet().Musteri.TableName);
            }
            else
            {
                drMusteri = MusteriListesi.Musteri.FindByMusteriID(SecilenMusteriID);
            }
            drMusteri.LisansSahibiKullaniciID = AktifKullanici.KullaniciBilgisiRow.IsLisansSahibiKullaniciIDNull() 
                                                ? AktifKullanici.KullaniciBilgisiRow.KullaniciID 
                                                : AktifKullanici.KullaniciBilgisiRow.LisansSahibiKullaniciID;
            drMusteri.LisansSahibiAdi = AktifKullanici.KullaniciBilgisiRow.KullaniciAdi;
            drMusteri.LisansSahibiSoyadi = AktifKullanici.KullaniciBilgisiRow.Soyadi;
            drMusteri.LisansSahibiBuroNo = AktifKullanici.KullaniciBilgisiRow.BuroNo;
            drMusteri.LisansSahibiBelgeNo = AktifKullanici.KullaniciBilgisiRow.BelgeNo;
            drMusteri.LisansSahibiSicilNo = AktifKullanici.KullaniciBilgisiRow.SicilNo;
            drMusteri.MusteriTipi = Convert.ToByte(ddlMusteriTipiKayit.SelectedIndex);
            drMusteri.Adi = txtAdi.Text;
            drMusteri.Soyadi = txtSoyadi.Text;
            drMusteri.TCKimlikNo = txtTCKimlikNo.Text;
            drMusteri.VergiNo = txtVergiNo.Text;
            drMusteri.Unvani = txtUnvani.Text;
            drMusteri.TelefonNo = txtTelefonNo.Text;
            drMusteri.Adres = txtAdres.Text;

            if (SecilenMusteriID == -1)
                MusteriListesi.Musteri.AddMusteriRow(drMusteri);

            if (MusteriListesi.HasChanges())
            {
                TanimlamaIsKurali oTanimlama = new TanimlamaIsKurali();
                FonksiyonSonuc<Boolean> oSonuc = oTanimlama.MusteriKaydet((MusteriDataSet)MusteriListesi.GetChanges());
                if (oSonuc.HataVarMi)
                {
                    MusteriListesi.RejectChanges();
                    throw new Exception(oSonuc.Hata);
                }
                MusteriListesi.AcceptChanges();
            }

            MusteriListele();
            FormTemizle();
            mv.SetActiveView(vListe);
            MesajGoster(Page, "Musteri bilgisi başarıyla kaydedilmiştir", MesajTipiEnum.Basari);
        }

        protected void btnYeniKayit_Click(object sender, EventArgs e)
        {
            FormTemizle();
            mv.SetActiveView(vKayit);
        }

        protected void btnListele_Click(object sender, EventArgs e)
        {
            MusteriListele();
        }
        protected void btnGeri_Click(object sender, EventArgs e)
        {
            SecilenMusteriID = -1;
            mv.SetActiveView(vListe);
        }

        protected void grdMusteriListe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName != "Page")
            {
                int rowIndex = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(grdMusteriListe.DataKeys[rowIndex].Value.ToString());

                if (e.CommandName == "duzenle")
                {
                    FormTemizle();
                    SecilenMusteriID = id;
                    FormDoldur();
                    mv.SetActiveView(vKayit);
                }
                if (e.CommandName == "sil")
                {
                    MusteriDataSet.MusteriRow drMusteri = MusteriListesi.Musteri.FindByMusteriID(id);
                    drMusteri.Delete();

                    if (MusteriListesi.HasChanges())
                    {
                        TanimlamaIsKurali oTanimlama = new TanimlamaIsKurali();
                        FonksiyonSonuc<Boolean> oSonuc = oTanimlama.MusteriKaydet((MusteriDataSet)MusteriListesi.GetChanges());
                        if (oSonuc.HataVarMi)
                        {
                            MusteriListesi.RejectChanges();
                            throw new Exception(oSonuc.Hata);
                        }
                        MusteriListesi.AcceptChanges();
                    }

                    MusteriListele();
                    FormTemizle();
                    mv.SetActiveView(vListe);
                    MesajGoster(Page, "Musteri bilgisi başarıyla silinmiştir.", MesajTipiEnum.Basari);
                }
            }
        }

        protected void grdMusteriListe_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                MusteriDataSet.MusteriRow dr = (MusteriDataSet.MusteriRow)((DataRowView)(e.Row.DataItem)).Row;
                e.Row.Cells[0].Text = ((EnumMusteriTipi)dr.MusteriTipi).ToString().Replace("_", " ");
            }
        }

        protected void grdMusteriListe_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdMusteriListe.DataSource = MusteriListesi;
            grdMusteriListe.PageIndex = e.NewPageIndex;
            grdMusteriListe.DataBind();
        }
        #endregion

    }
}
